package day12.ReviewJUC;

/*
 * Author: JacksonCoder
 * FileName: ThreadPoolDemo
 * Version: 1.0.0
 * Date: 2025/4/22
 */

import java.util.concurrent.*;

public class ThreadPoolDemo {
    /**
     * 方法名	                                描述
     * Executors.newFixedThreadPool(n)	创建固定大小线程池（适合执行长期任务）
     * Executors.newCachedThreadPool()	创建可根据需要调整线程数量的池（短任务）
     * Executors.newSingleThreadExecutor()	创建单线程线程池（顺序执行任务）
     * Executors.newScheduledThreadPool(n)	创建可执行延迟任务或周期任务的线程池
     *
     * Executor（接口）
     *    ↑
     * ExecutorService（接口，继承Executor）
     *    ↑
     * ThreadPoolExecutor（类，实现ExecutorService）
     *
     * 对比项	   Executor	                                      ThreadPoolExecutor
     * 所属层级	   接口	                                     实现类（最核心的线程池实现类）
     * 定义	Java   并发包中线程执行的顶层接口	                 真正的线程池实现类，提供完整的线程池控制
     * 使用场景	 面向接口编程，一般配合 Executors 工厂方法	     需要自定义线程池参数（线程数、队列、拒绝策略等）
     * 可控性	  不能控制线程池细节	                         可以精细化控制线程池行为
     * @param args
     */

    public static void main(String[] args) {
        // Executors的使用
        Executor executor = Executors.newSingleThreadExecutor();  // 创建一个固定大小的线程池
        executor.execute(() ->{
            System.out.println("Executor任务执行：" + Thread.currentThread().getName());
        });

        System.out.println("");

        // ThreadPoolExecutor
        ExecutorService pool = new ThreadPoolExecutor(
                2,4,60, TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(10)
        );
        pool.execute(() -> {
            System.out.println("ThreadPoolExecutor任务执行：" + Thread.currentThread().getName());
        });

    }

}
/**
 * 总结：
 *  Executor 是接口，用来提交任务。
 *  ThreadPoolExecutor 是线程池的核心实现，推荐直接使用，参数灵活、行为明确。
 *  面试/开发中：不要再用 Executors 创建线程池了，推荐使用 ThreadPoolExecutor 自定义线程池！
 */
